using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Collections;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Net.Sockets;

namespace BrainTechLLC
{
    [DataContract]
    public enum StoredFightData
    {
        [EnumMember]
        ears = 0,
        [EnumMember]
        attacker_turn = 1,
        [EnumMember]
        attacks = 2,
        [EnumMember]
        wasroomtwo = 3,
        [EnumMember]
        upd = 4,
        [EnumMember]
        in_battle = 5,
        [EnumMember]
        challenge = 6,
        [EnumMember]
        combat_delay_count = 7,
        [EnumMember]
        script_delay = 8,
        [EnumMember]
        tag_in_proc = 9,
        [EnumMember]
        field_ticks = 10,
        [EnumMember]
        auto_toggles = 11,
        [EnumMember]
        OffBalance = 12,
        [EnumMember]
        CurrentMaxStoredFightData = 16
    }

    [FlagsAttribute]
    public enum DisplaysTo
    {
        None = 0,
        chInitiated = 1,
        Target = 1 << 1,
        AllTargets = 1 << 2,
        BystandersInCharRoom = 1 << 3,
        BystandersInTargetRoom = 1 << 4
    }


    // Don't think we will need these....
    public enum ChannelColors
    {
        CHAT = 0,
        CLANTALK = 1,
        IMMTALK = 6,
        YELL = 2,
        SAY = 3,
        TELL = 4,
        GODTALK = 5
    }

    [FlagsAttribute]
    [DataContract]
    public enum ItemProperties
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        GLOW = 0x00000001,	/* Can HPCurrent ghosts if on a weapon */
        [EnumMember]
        HUM = 0x00000002,	/* Can HPCurrent ghosts if on a weapon */
        [EnumMember]
        EVIL = 0x00000010,	/* Registers with detect evil */
        [EnumMember]
        GOOD = 0x00800000, /* Registers with detect good */
        [EnumMember]
        INVIS = 0x00000020,	/* Item is invisible */
        [EnumMember]
        MAGIC = 0x00000040,	/* Item registers with detect magic */
        [EnumMember]
        NODROP = 0x00000080,	/* Can't drop this item */
        [EnumMember]
        ANTI_GOOD = 0x00000200, /* Goods can't use this item */
        [EnumMember]
        ANTI_EVIL = 0x00000400,	/* Evils can't use this item */
        [EnumMember]
        ANTI_NEUTRAL = 0x00000800,	/* Neutrals can't use this item */
        [EnumMember]
        NOREMOVE = 0x00001000,	/* Can't unequip this item */
        [EnumMember]
        INVENTORY = 0x00002000,	/* For shop use, internal */
        [EnumMember]
        NOSAVE = 0x00004000,	/* Item doesn't save when you quit */
        [EnumMember]
        UNSEEN = 0x00010000, /* Hidden.  Untakable hidden objects cannot be searched for. */

        /* ------------------ */
        /* Weapon bonus flags */
        /* ------------------ */
        [EnumMember]
        PIERCE = 0x00020000,	/* Gives a bonus for piercing skill */
        [EnumMember]
        SLASHING = 0x00040000,	/* slashing */
        [EnumMember]
        CONCUSSION = 0x00080000,	/* pounding/concussion */
        [EnumMember]
        WHIP = 0x00100000,	/* whipping */
        [EnumMember]
        HEAVY_SLASH = 0x00200000,	/* Gives a slashing bonus, large if the player is strong, not much if the player is weak. */
        [EnumMember]
        LIGHT_SLASH = 0x00400000,	/* Gives a large slashing bonus */
        [EnumMember]
        SAVE = 0x10000000,	/* Item saves with a character through death. */
        [EnumMember]
        NOSTORE = 0x20000000,	/* Cannot store this item in the bank */
        [EnumMember]
        NOPKILL = 0x40000000	/* Non-pkiller item only.  Unused. */
    }

    [FlagsAttribute]
    [DataContract]
    public enum ItemActionProperties
    {
        [EnumMember]
        none = 0,
        [EnumMember]
        take = 0x00000001,
        [EnumMember]
        finger = 0x00000002,
        [EnumMember]
        neck = 0x00000004,
        [EnumMember]
        body = 0x00000008,
        [EnumMember]
        head = 0x00000010,
        [EnumMember]
        legs = 0x00000020,
        [EnumMember]
        feet = 0x00000040,
        [EnumMember]
        hands = 0x00000080,
        [EnumMember]
        arms = 0x00000100,
        [EnumMember]
        shield = 0x00000200,
        [EnumMember]
        about = 0x00000400,
        [EnumMember]
        waist = 0x00000800,
        [EnumMember]
        wrist = 0x00001000,
        [EnumMember]
        belt = 0x00002000,
        [EnumMember]
        wield = 0x00004000,
        [EnumMember]
        hold = 0x00004000,
        /* -------------------------------- */
        /* mortal conquest compatible flags */
        /* -------------------------------- */
        [EnumMember]
        shoulder = 0x00008000,
        [EnumMember]
        face = 0x00010000,
        [EnumMember]
        floating = 0x00020000,
        [EnumMember]
        leftear = 0x00040000,
        [EnumMember]
        ankle = 0x00080000,
        [EnumMember]
        rightear = 0x00100000
    }

    [DataContract]
    public enum CharPosition
    {
        [EnumMember]
        dead = 0,
        [EnumMember]
        dying = 1,	/* Mortally wounded */
        [EnumMember]
        incapacitated = 2,	/* Incapacitated */
        [EnumMember]
        stunned = 3,	/* Stunned */
        [EnumMember]
        sleeping = 4,	/* Sleeping */
        [EnumMember]
        resting = 5,	/* Resting */
        [EnumMember]
        fighting = 7,	/* Fighting */
        [EnumMember]
        circling = 8,	/* Circling */
        [EnumMember]
        bashed = 9,	/* Bashed to ground */
        [EnumMember]
        groundfighting = 10,	/* Groundfighting */
        [EnumMember]
        falling = 11,	/* Falling! */
        [EnumMember]
        standing = 12,	/* Standing, not chAttacking */
        [EnumMember]
        running = 13,	/* Running */
        [EnumMember]
        searching = 14,	/* Searching for exit/item */
        [EnumMember]
        sneaking = 15,	/* Backstab preparation */
        [EnumMember]
        meditating = 16,	/* Meditating */
        [EnumMember]
        investigating = 17,	/* Investigating */
        [EnumMember]
        casting = 18	/* Casting a spell */
    }


    [FlagsAttribute]
    [DataContract]
    public enum PlayerSpecialBits
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        HOLYLIGHT = 0x00000004,	/* Can see in the dark, invis, etc */
        [EnumMember]
        LOG = 0x00000010,	/* Keep logs of this player's commands */
        [EnumMember]
        DENY = 0x00000020,	/* Deny this character from logging in */
        [EnumMember]
        FREEZE = 0x00000040,	/* Freeze this character */
        [EnumMember]
        HOLYPEACE = 0x00010000,	/* Nobody can attack anyone while in the
					   currentRoom with this immortal. */
        [EnumMember]
        HOLYWALK = 0x00020000,	/* Can walk through anything, anywhere */
        [EnumMember]
        HOLYLAG = 0x00100000	/* Is this immortal delayed on delayed
					   commands like mortals? */
    }

    [FlagsAttribute]
    public enum NotificationType
    {
        NOTIFY = 0x00000080,
        NOTIFY_1 = 0x00000100,
        NOTIFY_2 = 0x00000200,
        NOTIFY_LOGIN = 0x00000400,
        NOTIFY_DEATH = 0x00000800,
        NOTIFY_BUG = 0x00001000,
        NOTIFY_LOG = 0x00002000,
        NOTIFY_SCRIPT = 0x00004000
    }

    [FlagsAttribute]
    public enum ChannelTypes
    {
        AUCTION = 0x00000001,
        CHAT = 0x00000002,
        CLANTALK = 0x00000004,
        IMMTALK = 0x00000008,
        NOTIFY = 0x00000010,
        YELL = 0x00000080,
        GODTALK = 0x00000100
    }

    [FlagsAttribute]
    [DataContract]
    public enum PlayerSettings : long
    {
        [EnumMember]
        AUTOGOLD = 0x00000100,	/* Gets gold from kills */
        [EnumMember]
        AUTOEXIT = 0x00000200,	/* Displays exits in currentRoom description */
        [EnumMember]
        AUTOLOOT = 0x00000400,	/* Loots all kills */
        [EnumMember]
        AUTOSAC = 0x00000800,	/* Sacs corpses of all kills */
        [EnumMember]
        BLANK = 0x00001000,	/* Blank line before prompt */
        [EnumMember]
        BRIEF = 0x00002000,	/* Brief mode - no long currentRoom descs */
        [EnumMember]
        COMBINE = 0x00004000,	/* Combine object listings */
        [EnumMember]
        PROMPT = 0x00008000,	/* Prompt is on/off */
        [EnumMember]
        TELNET_GA = 0x00010000, /* Non-compat, but same name!  Warning */
        [EnumMember]
        ASSIST = 0x00020000,	/* Auto-assists people in group against
					   mobs.  To assist against other players,
					   you must manually type assist. */
        [EnumMember]
        AUTOSPLIT = 0x00040000,	/* auto-splits any cash looted */

        [EnumMember]
        SILENCE = 0x00080000,	/* Player cannot use channels */

        [EnumMember]
        ANSI = 0x00400000,	/* Ansi is on/off for this player? */
        [EnumMember]
        VT100 = 0x00800000,	/* Masks ANSI */

        [EnumMember]
        BLANKPROMPT = 0x04000000,	/* Floating prompts */
        [EnumMember]
        PROMPT_UP = 0x08000000,	/* Prompt with map or down below? */
        [EnumMember]
        MAPPING = 0x10000000,		/* Mapping option on */
        [EnumMember]
        MAPPING_DISABLED = 0x20000000		/* Map disabled, indoors */
    }

    [FlagsAttribute]
    public enum ManaType
    {
        AnyManaType = 0x1FFFFFFF,
        earth = 1,
        air = 1 << 1,
        fire = 1 << 2,
        water = 1 << 3
    }


    [FlagsAttribute]
    [DataContract]
    public enum SpellTargets
    {
        [EnumMember]
        IGNORE = 0x00000000,	/* No target needed */
        [EnumMember]
        CHAR_OFFENSIVE = 0x00000001,	/* Offensive spell */
        [EnumMember]
        CHAR_DEFENSIVE = 0x00000002,	/* Defensive spell */
        [EnumMember]
        CHAR_SELF = 0x00000004,	/* Self only */
        [EnumMember]
        OBJ_INV = 0x00000008,	/* Object in inventory */
        [EnumMember]
        ALL_IN_ROOM = 0x00000010	/* Everyone in currentRoom */
    }


    [FlagsAttribute]
    public enum Implants
    {
        arms = 0x00000001,
        legs = 0x00000002,
        head = 0x00000004,
        feet = 0x00000008,
        hands = 0x00000010,
        body = 0x00000020
    }

    [FlagsAttribute]
    public enum Professions
    {
        None = 0,
        Healer = 1,
        Wizard = 1 << 1,
        Knight = 1 << 2,
        Barbarian = 1 << 3,
        Ranger = 1 << 4,
        Paladin = 1 << 5,
        Druid = 1 << 6,
        Archmage = 1 << 7,
        Assassin = 1 << 8,
        Monk = 1 << 9,
        AturionHunter = 1 << 10,
        AturionEngineer = 1 << 11,
        AturionPhilosopher = 1 << 12,
        Bard = 1 << 13
    }

    public enum StatTypes
    {
        None = -1,
        Strength = 0,
        Intelligence = 1,
        Wisdom = 2,
        Dexterity = 3,
        Constitution = 4,
        MaxStatNumber = 5
    }

    public enum LiquidType
    {
        Water = 0
    }

    [FlagsAttribute]
    [DataContract]
    public enum EvilBits
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        SuckAllMana = 1,
        [EnumMember]
        SuckHalfMana = 1 << 1,
        [EnumMember]
        RemoveAllSpellEffects = 1 << 2,
        [EnumMember]
        SuckHalfHP = 1 << 3,
        [EnumMember]
        SuckHalfMP = 1 << 4,
        [EnumMember]
        DestroyObject = 1 << 5,
        [EnumMember]
        DestroyRandomObject = 1 << 6
    }

    public enum HumanoidProfessions
    {
        None = 0,
        Healer,
        Wizard,
        Knight,
        Barbarian,
        Ranger,
        Paladin,
        Assassin,
        Monk,
        Bard
    }

    public enum SecondaryProfessions
    {
        None = 0,
        Druid,
        Archmage
    }

    public enum AturionProfessions
    {
        None = 0,
        Hunter = 1,
        Engineer = 2,
        Philosopher = 3,
    }

    [FlagsAttribute]
    public enum LogType
    {
        None = 0,
        Always = 1,
        Never = 1 << 1,
        NotSerious = 1 << 2,
        Normal = 1 << 3,
        WorldError = 1 << 4,
        ConnectionError = 1 << 5,
        FromModule = 1 << 6,
        Message = 1 << 7
    }

    // These will likely not be used at all
    public enum TimingStatus
    {
        FightingUpdate = 0,
        PlayerUpdate = 1,
        MobileUpdate = 2,
        RecheckFighting = 3,
        TransportationUpdate = 4,
        AllCharactersUpdate = 5,
        ObjectUpdate = 6,
        AggressiveCheck = 7,
        InterprettedCommands = 8,
        ScriptInterpret = 9,
        CurrentMaxUpdate = 10,

    }

    [DataContract]
    public enum ApplyEffect
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        STR = 1,
        [EnumMember]
        DEX = 2,
        [EnumMember]
        INT = 3,
        [EnumMember]
        WIS = 4,
        [EnumMember]
        CON = 5,
        [EnumMember]
        HIT = 13,
        [EnumMember]
        MOVE = 14,
        [EnumMember]
        AC = 17,	/* Negative is good */
        [EnumMember]
        HITROLL = 18,	/* Positive is good */
        [EnumMember]
        DAMROLL = 19,	/* Positive is good */
        [EnumMember]
        SAVING_THROW = 20,	/* Negative is good */
        [EnumMember]
        /* ------------- */
        /* Code specific */
        /* ------------- */
        RESIST_SUMMON = 21,
        [EnumMember]
        KICK_DAMAGE = 22,
        [EnumMember]
        SNEAK = 23,
        [EnumMember]
        HIDE = 24
    }


    [FlagsAttribute]
    [DataContract]
    public enum RoomFlags : long
    {
        [EnumMember]
        NONE = 0,				// 0x00000000,
        [EnumMember]
        DARK = 1,				// 0x00000001,	/* Room is dark */
        [EnumMember]
        NO_MOB = 1 << 1,		// 0x00000002,	/* No mobs will wander into this currentRoom. Mobs will, however, track through here. */
        [EnumMember]
        INDOORS = 1 << 2,		// 0x00000004,	/* Room is indoors */
        [EnumMember]
        UNUSED = 1 << 3,		// 0x00000008,
        [EnumMember]
        UNUSED2 = 1 << 4,		// 0x00000010,
        [EnumMember]
        NOHEAR = 1 << 5,		// 0x00000020, /* Can't hear yells here */
        [EnumMember]
        PET_SHOP = 1 << 6,	// 0x00000040,	/* Is a pet shop */
        [EnumMember]
        NO_RECALL = 1 << 7,		// 0x00000080,		/* Can't recall from here */			
        [EnumMember]
        NOISY = 1 << 8,		// 0x00000100,			/* Noisy, yells don't go as far */
        [EnumMember]
        MARK = 1 << 9,			// 0x00000200,			/* Mark a currentRoom */
        [EnumMember]
        NOSUMMON = 1 << 10,	// 0x00000400,		/* Can't summon TO/FROM this currentRoom */
        [EnumMember]
        UNTRACKABLE = 1 << 11,// 0x00000800,	/* Can't track through this currentRoom */
        [EnumMember]
        GYSERTRAP = 1 << 12,	// 0x00001000,		/* Gyser scalds */
        [EnumMember]
        MOVING = 1 << 13,		// 0x00002000,			/* Room has a 'current' */
        [EnumMember]
        NOMAGIC = 1 << 14,	// 0x00004000,		/* No spells allowed here */
        [EnumMember]
        SILENCE = 1 << 15,	// 0x00008000,		/* Nobody can talk from here */
        [EnumMember]
        ACIDSPRAY = 1 << 16,	// 0x00010000,	/* Sprays player with acid */
        [EnumMember]
        FALLSFAST = 1 << 17,	// 0x00020000,	/* Person falls down if they are in an air sector and can't fly. */
        [EnumMember]
        ISVEHICLE = 1 << 18,	// 0x00040000,	/* The currentRoom is a vehicle (buggy, boat, etc) */
        [EnumMember]
        UNUSED4 = 1 << 19,	// 0x00080000,
        [EnumMember]
        EXTRAHEAL = 1 << 20,	// 0x00100000,	/* Slight healing bonus in this currentRoom */
        [EnumMember]
        EXTRAMANA = 1 << 21,	// 0x00200000, /* Slight mana bonus in this currentRoom.. buggy */			 
        [EnumMember]
        CLANSTORE = 1 << 22,	// 0x00400000,	/* This is a clan rgObjectsStored currentRoom */
        [EnumMember]
        MANADRAIN = 1 << 23,	// 0x00800000,	/* Drains all mana */
        [EnumMember]
        FIRETRAP = 1 << 24,	// 0x01000000,	/* Fire burns CharactersInRoom */
        [EnumMember]
        POISONTRAP = 1 << 25,// 0x02000000,	/* Poison arrows shoot CharactersInRoom */
        [EnumMember]
        ARROWTRAP = 1 << 26,	// 0x04000000,	/* Arrows shoot CharactersInRoom */
        [EnumMember]
        ROCKTRAP = 1 << 27,	// 0x08000000,	/* Rocks fall on CharactersInRoom */
        [EnumMember]
        SPIKETRAP = 1 << 28,	// 0x10000000,	/* Spikes stab CharactersInRoom */
        [EnumMember]
        GASTRAPONE = 1 << 29,// 0x20000000,	/* Unused, not working */
        [EnumMember]
        GASTRAPTWO = 1 << 30,// 0x40000000,	/* Noxious gas poisons CharactersInRoom */
        [EnumMember]
        UNUSED3 = 1 << 31,	// 0x80000000,	
        [EnumMember]
        OCEAN_D = 1 << 32,		// 0x0000000100000000,	/* Generate generic ocean description */
        [EnumMember]
        FOREST_D = 1 << 33,		// 0x0000000200000000,	/* Generate generic forest description */
        [EnumMember]
        RFOREST_D = 1 << 34,		// 0x0000000400000000,	/* Generate generic rainforest description */
        [EnumMember]
        FIELD_D = 1 << 35,		// 0x0000000800000000,	/* Generate season-based field description */
        [EnumMember]
        LIGHTF_D = 1 << 36,		// 0x0000001000000000,	/* Generate light forest description */
        [EnumMember]
        EARTHCAVE_D = 1 << 37,	// 0x0000002000000000,	/* Generate earthen cave description */
        [EnumMember]
        ANCIENTROAD = 1 << 38,	// 0x0000004000000000,	/* Generate ancient road description */
        [EnumMember]
        HILL_D = 1 << 39,			// 0x0000008000000000,	/* Generate generic hill description */
        [EnumMember]
        IS_SHADED = 1 << 40		// 0x0000010000000000	/* Room is shaded */
    }

    //public enum GeneralDirection
    //{
    //    north = 0,
    //    east = 1,
    //    south = 2,
    //    west = 3,
    //    up = 4,
    //    down = 5,
    //    MAX = 6
    //}

    //public enum ReverseDirections
    //{
    //    south = 0,
    //    west = 1,
    //    north = 2,
    //    east = 3,
    //    down = 4,
    //    up = 5,
    //    MAX = 6
    //}


    [FlagsAttribute]
    [DataContract]
    public enum ExitFlags
    {
        [EnumMember]
        None = 0,
        [EnumMember]
        ISDOOR = 1,	/* This IS a door */
        [EnumMember]
        CLOSED = 1 << 1,	/* Door is closed */
        [EnumMember]
        LOCKED = 1 << 2, /* Door is locked */
        [EnumMember]
        PICKPROOF = 1 << 4,	/* Door cannot be picked */
        [EnumMember]
        BASHPROOF = 1 << 5,	/* Door cannot be broken */
        [EnumMember]
        HIDDEN = 1 << 7,	/* Hidden door */
        [EnumMember]
        RESET = 1 << 8 /* Resets on repop if broken */
    }

    [FlagsAttribute]
    [DataContract]
    public enum ItemTypes : long
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        LIGHT = 1,
        [EnumMember]
        SCROLL = 1 << 1,
        [EnumMember]
        WAND = 1 << 2,
        [EnumMember]
        STAFF = 1 << 3,
        [EnumMember]
        WEAPON = 1 << 4,
        [EnumMember]
        TREASURE = 1 << 5,
        [EnumMember]
        ARMOR = 1 << 6,
        [EnumMember]
        POTION = 1 << 7,
        [EnumMember]
        BOOK = 1 << 8,
        [EnumMember]
        FURNITURE = 1 << 9,
        [EnumMember]
        TRASH = 1 << 10,
        [EnumMember]
        CONTAINER = 1 << 11,
        [EnumMember]
        DRINK_CON = 1 << 12,
        [EnumMember]
        KEY = 1 << 13,
        [EnumMember]
        FOOD = 1 << 14,
        [EnumMember]
        GEM = 1 << 15,
        [EnumMember]
        VEHICLE = 1 << 16,
        [EnumMember]
        CORPSE_NPC = 1 << 17,
        [EnumMember]
        CORPSE_PC = 1 << 18,
        [EnumMember]
        FOUNTAIN = 1 << 19,
        [EnumMember]
        PILL = 1 << 20,
        [EnumMember]
        TOOL = 1 << 21,
        [EnumMember]
        LIST = 1 << 22,
        [EnumMember]
        BLOOD = 1 << 23,
        [EnumMember]
        CLIMBABLE = 1 << 24,
        [EnumMember]
        SCALABLE = 1 << 25,
        [EnumMember]
        SCALE_DEV = 1 << 26,
        [EnumMember]
        MAP = 1 << 27,
        [EnumMember]
        TICKET = 1 << 28,
        [EnumMember]
        BOAT = 1 << 29,
        [EnumMember]
        REPELLANT = 1 << 30
    }

    /// <summary>
    /// For compatability with old object data files ONLY
    /// </summary>
    [DataContract]
    public enum ItemType
    {
        [EnumMember]
        LIGHT = 1,
        [EnumMember]
        SCROLL = 2,
        [EnumMember]
        WAND = 3,
        [EnumMember]
        STAFF = 4,
        [EnumMember]
        WEAPON = 5,
        [EnumMember]
        TREASURE = 8,
        [EnumMember]
        ARMOR = 9,
        [EnumMember]
        POTION = 10,
        [EnumMember]
        BOOK = 11,
        [EnumMember]
        FURNITURE = 12,
        [EnumMember]
        TRASH = 13,
        [EnumMember]
        CONTAINER = 15,
        [EnumMember]
        DRINK_CON = 17,
        [EnumMember]
        KEY = 18,
        [EnumMember]
        FOOD = 19,
        [EnumMember]
        WHATIS20 = 20,
        [EnumMember]
        GEM = 21,
        [EnumMember]
        VEHICLE = 22,
        [EnumMember]
        CORPSE_NPC = 23,
        [EnumMember]
        CORPSE_PC = 24,
        [EnumMember]
        FOUNTAIN = 25,
        [EnumMember]
        PILL = 26,
        [EnumMember]
        TOOL = 27,
        [EnumMember]
        LIST = 28,
        [EnumMember]
        BLOOD = 29,
        [EnumMember]
        CLIMBABLE = 30,
        [EnumMember]
        SCALABLE = 31,
        [EnumMember]
        SCALE_DEV = 32,
        [EnumMember]
        MAP = 33,
        [EnumMember]
        TICKET = 34,
        [EnumMember]
        BOAT = 35,
        [EnumMember]
        REPELLANT = 36
    }




    [FlagsAttribute]
    [DataContract]
    public enum Condition
    {
        None = 0,
        Drunk = 1,
        Full = 1 << 1,
        Thirst = 1 << 2,
        Starving = 1 << 3
    }

    /* -------------------- */
    /* Guild flags and info */
    /* -------------------- */
    [FlagsAttribute]
    [DataContract]
    public enum GuildType
    {
        Tinker = 0x00000010,
        Warrior = 0x00000020,
        Thief = 0x00000040,
        Healer = 0x00000080,
        Wizard = 0x00000100,
        Ranger = 0x00000200,
        Assassin = 0x00000400
    }

    /* -------------------------------- */
    /* Minimum level to join each guild */
    /* -------------------------------- */
    [DataContract]
    public enum MinGuildLevels
    {
        TINKER = 14,
        WARRIOR = 15,
        THIEFG = 14,
        HEALER = 17,
        WIZARD = 20,
        RANGER = 16,
        ASSASSIN = 24
    }

    /* ----------------------- */
    /* Cost to join each guild */
    /* ----------------------- */
    [DataContract]
    public enum GuildCosts
    {
        TINKER = 17500,
        WARRIOR = 14000,
        THIEFG = 19000,
        HEALER = 27000,
        WIZARD = 21000,
        RANGER = 15050,
        ASSASSIN = 43000
    }

    /* ---------------------------------------- */
    /* Small compatibility with Mortal Conquest */
    /* ---------------------------------------- */
    [DataContract]
    public enum SectorType
    {
        [EnumMember]
        INSIDE = 0,	/* Inside, set INDOORS flag too! */
        [EnumMember]
        CITY = 1,	/* City, easy moving */
        [EnumMember]
        FIELD = 2,	/* Field, easy moving */
        [EnumMember]
        FOREST = 3,	/* Forest, tough going */
        [EnumMember]
        HILLS = 4,	/* Hills, tough going */
        [EnumMember]
        MOUNTAIN = 5,	/* Do not use.. broken */
        [EnumMember]
        WATER_SWIM = 6,	/* Swimable water */
        [EnumMember]
        WATER_NOSWIM = 7,	/* Unswimable water */
        [EnumMember]
        UNDERWATER = 8,	/* Underwater */
        [EnumMember]
        AIR = 9,	/* Air sector */
        [EnumMember]
        DESERT = 10,	/* Desert, -2 thirst, hot */
        [EnumMember]
        SNOW = 11,	/* Hard moving, cold */
        [EnumMember]
        TROPICAL = 12,	/* Tropical, hot */
        [EnumMember]
        JAVA = 13, /* Java sector for looks only */
        [EnumMember]
        ICE = 14, /* Ice sector.. slippery footing */
        [EnumMember]
        MARSH = 15, /* Marsh sector.. no blood trails */
        [EnumMember]
        NONE = 16
    }


    /* ------------------------------------------------------------------------- */
    /* Wear locations compat with Theisles  (big sacrifice with this method
        is only one possible place to wear each object.  However, I guess the
        compatibility is worth it...) */
    /* ------------------------------------------------------------------------- */
    [DataContract]
    public enum WearPosition
    {
        NONE = -1,
        FINGER_L = 0,
        FINGER_R = 1,
        NECK_1 = 2,
        NECK_2 = 3,
        BODY = 4,
        HEAD = 5,
        LEGS = 6,
        FEET = 7,
        HANDS = 8,
        ARMS = 9,
        SHIELD = 10,
        ABOUT = 11,
        WAIST = 12,
        WRIST_L = 13,
        WRIST_R = 14,
        FLOATING = 15,
        BELT_1 = 16,
        BELT_2 = 17,
        BELT_3 = 18,
        BELT_4 = 19,
        BELT_5 = 20,
        HOLD_1 = 21,
        HOLD_2 = 22,
        SHOULDER_L = 23,
        SHOULDER_R = 24,
        FACE = 25,
        EAR_1 = 26,
        EAR_2 = 27,
        ANKLE_1 = 28,
        ANKLE_2 = 29
    }

    /* --------------------------------------------------------------------------- */
    /* Tried to keep things similar to Diku/Merc, for area conversion, but I don't
        think it's very possible.. sigh */
    /* --------------------------------------------------------------------------- */
    [FlagsAttribute]
    [DataContract]
    public enum ActionsAndBehavior : long
    {
        NONE = 0,
        ASSISTALL = 0x00000001,		/* Will assist all chAttacking mobs in currentRoom */
        SENTINEL = 0x00000002,		/* Mob doesn't MPCurrent */
        SCAVENGER = 0x00000004,		/* Picks things up from the ground */
        AGGRESSIVE = 0x00000008,		/* Attacks players on sight */
        STAY_AREA = 0x00000010,		/* Mob stays in it's area vnumClan */
        WIMPY = 0x00000020,		/* Mob tries to flee when low on HPCurrent points */
        PET = 0x00000040,		/* Is this a 'pet' mob? */
        UNTOUCHABLE = 0x00000080,		/* Only harmable by magic */
        PRACTICE = 0x00000100,		/* This mob can teach things */
        UNVAL = 0x00000200,		/* Unvalidated player! */
        KILLALLTWO = 0x00000400,	/* Kills everything flag two */
        KILLMEVIL = 0x00000800,	/* Kills evil mobs */
        SCRAMBLE = 0x00001000,		/* Used for rushing/running */
        MOUNTABLE = 0x00002000,		/* Can the mob be mounted? */
        KILLMGOOD = 0x00004000,	/* Kills good mobs */
        ANGRY = 0x00008000,		/* Similar to aggressive, but doesn't attack so fast. */
        STAY_SECTOR = 0x00010000,		/* Stays in the sector type it repop'd in */
        BANK_TELLER = 0x00020000,		/* Is this a bank teller or clan banker? */

        /* ---------------------------------------------------------------------- */
        /* On all flags from here on, there was no attempt to keep other codebase
            value flags */
        /* ---------------------------------------------------------------------- */

        REPAIRS_FREE = 0x00080000,		/* Repairs items for free */
        REPAIRS_ONE = 0x00100000,		/* repairs 1/8 cost */
        REPAIRS_TWO = 0x00200000,		/* ditto except 1/4 cost */
        RESCUEONE = 0x00400000,		/* rescue mobs with name PRTCT */
        RESCUETWO = 0x00800000,		/* rescue mobs with name CODEONE */
        KILLGLADIATOR = 0x01000000,		/* kills 'gladiator' */
        SLEEPAGGRO = 0x02000000,		/* aggro towards sleeping players */
        ATTITUDE = 0x04000000,		/* attacks if looked at */
        ASSISTONE = 0x08000000,		/* assists mobs with name AONE */
        ASSISTTWO = 0x10000000,		/* assists mobs with name ATWO */
        REST = 0x20000000,		/* mob rests when no PC's in currentRoom */
        RANGER = 0x40000000,		/* attacks "beast" */

        GUARD_ITEM = 0x0000000100000000,		/* Set to mobGuards an item */
        GUARD_DOOR = 0x0000000200000000,		/* Set to mobGuards a door */
        GUARD_MOB = 0x0000000400000000,		/* Set to mobGuards another mob */
        STAYROAD = 0x0000000800000000,		/* Stays on city/road sectors only */

        TINKER = 0x0000001000000000,		/* Tinker's guildmaster */
        WARRIOR = 0x0000002000000000,		/* Warrior's guildmaster */
        THIEFG = 0x0000004000000000,		/* Thief's guildmaster */
        HEALER = 0x0000008000000000,		/* Healer's guildmaster */
        WIZARD = 0x0000010000000000,		/* Wizard's guildmaster */
        GMRANGER = 0x0000020000000000,		/* Ranger's guildmaster */
        ASSASSIN = 0x0000040000000000,		/* Assassin's guildmaster */

        GUARD_DOOR_GOOD = 0x0000080000000000,		/* Guards door from 'good' */
        GUARD_DOOR_EVIL = 0x0000100000000000,		/* Guards door from 'evil' */
        KILL_GOOD = 0x0000200000000000,		/* spams KILL GOOD */
        KILL_EVIL = 0x0000400000000000,		/* spams KILL EVIL */

        MUTE = 0x0001000000000000,		/* Can't yell */
        RIDE = 0x0002000000000000,		/* Will ride the previously reset mob */
        FOLLOW = 0x0004000000000000,		/* Will follow " " " " */
        REGENERATE = 0x0008000000000000,		/* Regenerates at a fast rate */
        UNUSED = 0x0010000000000000,
        SLEEP = 0x0040000000000000,		/* Follows a daily sleep schedule */

        TAP = 0x0200000000000000,		/* tapping for engineers */
        MOBSWITCH = 0x0400000000000000,	/* Switches opponents during combat */
        FASTHUNT = 0x0800000000000000,	/* Hunts victims FAST */
        SOLOYELL = 0x1000000000000000,	/* Will yell solo if attacked */
        STAYOFFROAD = 0x2000000000000000,	/* Won't go onto city/road sectors */
        KILLALLONE = 0x4000000000000000,	/* Kills everything flag one */
    }

    [FlagsAttribute]
    public enum TempStatusFlags : long
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        HasYelled = 1,
        [EnumMember]
        Scanning = 1 << 1
    }



    [FlagsAttribute]
    [DataContract]
    public enum EffectType : long
    {
        [EnumMember]
        NONE = 0,
        [EnumMember]
        BLIND = 1,				//0x0000000000000001, 	/* Blind */
        [EnumMember]
        INVISIBLE = 1 << 1,		//0x0000000000000002,		/* Invisible */
        [EnumMember]
        DETECT_EVIL = 1 << 2,	//0x0000000000000004,		/* People can tell evil objs/mobs */
        [EnumMember]
        DETECT_INVIS = 1 << 3,	//0x0000000000000008,		/* See invis */
        [EnumMember]
        DETECT_MAGIC = 1 << 4,	//0x0000000000000010,		/* People can tell magic items */
        [EnumMember]
        DETECT_HIDDEN = 1 << 5, //0x0000000000000020,		/* See hidden */
        [EnumMember]
        UNUSED = 1 << 6,
        [EnumMember]
        SANCTUARY = 1 << 7,		//0x0000000000000080,		/* Absorbs 0 to 1/2 of damage */
        [EnumMember]
        FAERIE_FIRE = 1 << 8,	//0x0000000000000100,		/* Lowers naturalArmor */
        [EnumMember]
        INFRARED = 1 << 9,	//0x0000000000000200,		/* See in the dark */
        [EnumMember]
        CURSE = 1 << 10,		//0x0000000000000400,		/* Cannot recall... */
        [EnumMember]
        UNUSED2 = 1 << 11,	//0x0000000000000800
        [EnumMember]
        POISON = 1 << 12,		//0x0000000000001000,		/* Poisoned */
        [EnumMember]
        PROTECT = 1 << 13,	//0x0000000000002000,	/* Absorbs 1/2 damage done */
        [EnumMember]
        UNUSED3 = 1 << 14,	//0x0000000000004000
        [EnumMember]
        SNEAK = 1 << 15,		//0x0000000000008000,	/* Sneaking.. */
        [EnumMember]
        HIDE = 1 << 16,		//0x0000000000010000,	/* Hidden.. */
        [EnumMember]
        SLEEP = 1 << 17,		//0x0000000000020000,	/* Forced sleep */
        [EnumMember]
        CHARM = 1 << 18,		//0x0000000000040000,	/* Charmed */
        [EnumMember]
        FLYING = 1 << 19,		//0x0000000000080000,	/* Flying */
        [EnumMember]
        PASS_DOOR = 1 << 20,	//0x0000000000100000,	/* Pass through unlocked doors. */
        [EnumMember]
        UNUSED4 = 1 << 21,	//0x0000000000200000,	
        [EnumMember]
        PLAGUE = 1 << 22,		//0x0000000000400000,	/* Plagued.. plague spreads. */
        [EnumMember]
        UNUSED5 = 1 << 23,	//0x0000000000800000,	
        [EnumMember]
        PROT_EVIL = 1 << 24,	//0x0000000001000000,	/* Protection from evil */
        [EnumMember]
        PROT_GOOD = 1 << 25,	//0x0000000002000000,	/* Protection from good */
        [EnumMember]
        UNUSED6 = 1 << 26,	//0x0000000004000000,
        [EnumMember]
        AWARENESS = 1 << 27,	//0x0000000008000000,	/* See people enter the currentRoom while asleep */
        [EnumMember]
        NOXIOUS = 1 << 28,	//0x0000000010000000,	/* Noxious fumes.  Unused. */
        [EnumMember]
        DETECT_GOOD = 1 << 29,//0x0000000020000000,	/* Detect good items/mobs */
        [EnumMember]
        NOCHARM = 1 << 30,	//0x0000000040000000,	/* Not charmable */
        [EnumMember]
        SAFETY = 1 << 31,		//0x0000000000800000,	/* Exempt from being attacked by aggro mobs of much lower level */
        [EnumMember]
        PROT_FIRE = 1 << 32,	//0x0000000100000000,	/* Protection from fire */
        [EnumMember]
        PROT_GAS = 1 << 33,	//0x0000000200000000,	/* Protection from gas */
        [EnumMember]
        MINDSHIELD = 1 << 34,//0x0000000400000000,	/* Spell protection */
        [EnumMember]
        SPEED = 1 << 35,		//0x0000000800000000,	/* Double attacks */
        [EnumMember]
        INSANITY = 1 << 36	//0x0000001000000000		/* Insanity! */
    }


    /* -------------------------------------------- */
    /* Sexflags - specifically follow Diku standard */
    /* -------------------------------------------- */
    [DataContract]
    public enum Sex
    {
        [EnumMember]
        NEUTRAL = 0,
        [EnumMember]
        MALE = 1,
        [EnumMember]
        FEMALE = 2
    }

    /// <summary>
    /// These should be converted into flags
    /// </summary>
    [DataContract]
    public enum ChannelTo
    {
        [EnumMember]
        SAME_ALIGN = 1,
        [EnumMember]
        TO_GOOD = 2,
        [EnumMember]
        TO_EVIL = 3,
        [EnumMember]
        TO_BOTH = 4
    }

    /* OLD script wait types */
    [DataContract]
    public enum WaitType
    {
        [EnumMember]
        CHAR_TICK = 1,
        [EnumMember]
        COMBAT_TICK = 2,
        [EnumMember]
        SMALL_TICK = 3,
        [EnumMember]
        PULSE = 4
    }

    /* ------------------------- */
    /* Where a blow is struck... */
    /* ------------------------- */
    [DataContract]
    public enum StrikeLocation
    {
        [EnumMember]
        BODY = 1,
        [EnumMember]
        HEAD = 2,
        [EnumMember]
        LEGS = 3,
        [EnumMember]
        ARMS = 4
    }

    /* --------------------------------------------------------- */
    /* These loosely follow theisles std and mortal conquest std */
    /* --------------------------------------------------------- */
    [DataContract]
    public enum StandardObjectVNums
    {
        CORPSE_NPC = 10,	/* vnumClan of generic mob corpse */
        CORPSE_PC = 11,	/* vnumClan of generic player corpse */
        SEVERED_HEAD = 12,	/* vnumClan of severed head */
        TORN_HEART = 13,	/* torn heart */
        SLICED_ARM = 14,	/* sliced arm */
        SLICED_LEG = 15,	/* sliced leg */
        INTESTINES = 16,	/* intestines */
        BLOOD = 40	/* Blood trails */
    }

    [DataContract]
    public enum StandardRoomVNums
    {
        ARENA = 504,		/* Arena currentRoom number */
        WAITONE = 508,		/* Waiting currentRoom 1 for arena */
        WAITTWO = 509		/* Waiting currentRoom 2 for arena */
    }

    /* ----------------- */
    /* Cool extra skills */
    /* ----------------- */
    [FlagsAttribute]
    [DataContract]
    public enum ExtraSkills
    {
        NONE = 0,
        MARTIAL_ARTIST = 0x00000001,	/* Kicks do extra dam */
        ARCHMAGE = 0x00000002,	/* Less casting time */
        NO_HUNGER = 0x00000004,	/* Never gets hungry */
        NO_THIRST = 0x00000008,	/* Never gets thirsty */
        CHEAP_RECALL = 0x00000010,	/* Cheap recall costs */
        VIEW_MOBS = 0x00000020,	/* Sees mobs on overhead mapping */
        NO_PKILL = 0x00000040	/* Cannot be pkilled */
    }
    /* --------------------------------------------------------------------- */
    /* Hit types for weapons.  Some unused.  Tried to maintain compatability
        with diku type muds... */
    /* --------------------------------------------------------------------- */
    [DataContract]
    public enum HitType
    {
        UNDEFINED = -1,
        HIT = 1000,	/* Max 1000 dynamic spells */
        SLASH = 1001,
        PIERCE = 1002,
        WHIP = 1003,
        EXPLODE = 1004,
        POUND = 1005,
        SUCTION = 1006,
        SHOT = 1090
    }



    [DataContract]
    public enum GeneralSN
    {
        Laser = 586,
        BodySlam = 582,
        Disembowel = 583,
        Tap = 584,
        Elbow = 585,
        Headbutt = 581,
        Berserk = 580,
        PrimalGrunt = 579,
        Investigation = 578,
        Riding = 577,
        Circle = 550,
        ArmorPenetration = 551,
        Swim = 552,
        Butcher = 553,
        Backstab = 554,
        Dodge = 555,
        Hide = 556,
        Peek = 557,
        Locksmithy = 558,
        Sneaking = 559,
        Steal = 560,
        Bash = 561,
        Tracking = 562,
        Disarm = 563,
        EnhancedDamage = 564,
        Kick = 565,
        Parry = 566,
        ShieldBlock = 567,
        Rescue = 568,
        SecondAttack = 569,
        ThirdAttack = 570,
        DualWield = 571,
        PiercingWeapons = 572,
        SlashingWeapons = 573,
        ConcussionWeapons = 574,
        WhippingWeapons = 575,
        Searching = 576
    }

    /* ------------------------------------------------------------------------- */
    /* Fight option defines.  Can be toggled on/off through the 'fight' command. */
    /* ------------------------------------------------------------------------- */
    [FlagsAttribute]
    [DataContract]
    public enum CombatSettings
    {
        [EnumMember]
        None = 0,
        [EnumMember]
        HEADBUTT = 0x00000001,
        [EnumMember]
        JUJI = 0x00000002,
        [EnumMember]
        ELBOW = 0x00000004,
        [EnumMember]
        KNEE = 0x00000008,
        [EnumMember]
        BITE = 0x00000010,
        [EnumMember]
        CHOKE = 0x00000020,
        [EnumMember]
        AGGRESSIVE = 0x00010000,
        [EnumMember]
        POWER = 0x00020000,
        [EnumMember]
        GROUND = 0x00040000
    }

    /* ------------------------------------------------------ */
    /* Time of day defines.  Compatable with diku style muds. */
    /* ------------------------------------------------------ */
    [DataContract]
    public enum TimeOfDayType
    {
        SUN_DARK = 0,
        SUN_RISE = 1,
        SUN_LIGHT = 2,
        SUN_SET = 3,
        MOON_RISE = 4,
        MOON_SET = 5
    }

    [DataContract]
    public enum InterfaceType
    {
        TextOnly = 0,
        ANSI = 1,
        HTML = 2
        // Other public interface types can be added
    }

    [DataContract]
    public enum SkyWeather
    {
        SKY_CLOUDLESS = 0,
        SKY_CLOUDY = 1,
        SKY_RAINING = 2,
        SKY_LIGHTNING = 3,
        SKY_FOGGY = 4
    }


    /* --------------------------------------- */
    /* POSITIONS for groundfightPosition.  Many unused. */
    /* --------------------------------------- */
    [FlagsAttribute]
    [DataContract]
    public enum GroundFightPositions
    {
        None = 0,
        CHOKE_1 = 0x00000001,
        CHOKE_2 = 0x00000002,
        CHOKE_3 = 0x00000004,
        STUNNED = 0x00000008,
        BLEEDING = 0x00000010,
        TOO_HEAVY = 0x00000020,
        PUNCHING = 0x00000040
    }

    /* --------------------------------------------------------------------- */
    /* These bits describe a spell's behavior, for use with the online spell
        creation/editing system. */
    /* --------------------------------------------------------------------- */
    [FlagsAttribute]
    [DataContract]
    public enum SpellFlags
    {
        NONE = 0x00000000,
        SUMMON = 0x00000001, 	//Summons a mob/character. mob summoning can be toggled on/off in power.dat
        TELEPORT = 0x00000002,	/* Teleports the victim */
        ALL_IN_ROOM = 0x00000004,   /* Affects everyone in the currentRoom */
        REMOVES_BIT = 0x00000008,	/* Removes a bit (like poison) */
        HEALS_DAM = 0x00000010,	/* Instead of removing damage on the victim in the dam field, the spell will heal this dam. */
        MESSAGE = 0x00000020,	/* Sends a message to another player */
        DISPEL_MAGIC = 0x00000040,	/* Dispels magic */
        HURT_EVIL = 0x00000080,	/* Works only on evil players */
        HURT_GOOD = 0x00000100,	/* Works only on good players */
        HURT_UNDEAD = 0x00000200,	/* Harms only undead mobs */
        MODIFY_OBJECT = 0x00000400,	/* NOT DONE YET */
        IDENTIFY = 0x00000800,	/* Behaves as an identify spell */
        LOCATE_OBJECT = 0x00001000,	/* Behaves as locate object spell */
        SCRY = 0x00002000,	/* Behaves as scry spell - used to look into the currentRoom where someone else in the game is. */
        LOCATE_PERSON = 0x00004000,	/* Behaves as locate spell - used to see the currentRoom name where someone is in. */
        RECALL = 0x00008000,	/* The recall spell */
        FAIL_1_2 = 0x00010000,	/* Spell will fail 1 out of 2 times, even if casting was initially successful */
        FAIL_1_3 = 0x00020000,	/* ditto, but 1 of 3 times. */
        FAIL_1_4 = 0x00040000,	/* ditto, but 1 of 4 times. */
        TWO_SAVES = 0x00080000,	/* Victim gets 2 saves, so the possibility of resisting is greatly increased. */
        ONLY_NOT_GROUP = 0x00100000, /* Only affects people not of your alignment in the currentRoom. For use with all_in_room. */
        ARMOR_1_4 = 0x00200000,	/* NYI */
        ONLY_MULTI_MOBS = 0x00400000,	/* Only affects multiple mobs. for use in conjunction with all_in_room */
        HALVED_SAVE = 0x00800000,	/* Spell damage is divided in half if the victim makes a saving throw. */
        NOT_SELF = 0x01000000,	/* Spell cannot be cast on the caster him/herself. */
        CHARM_PERSON = 0x02000000,	/* Unused for now. */
        OBJ_TO_ROOM = 0x04000000,	/* If the spell creates an object, it will go into the currentRoom instead of the character's inventory. */
        ADD_MOVE = 0x08000000,	/* Adds the 'dam' field to the victim's moves instead of doing damage. */
        ACID = 0x10000000,	/* Eats equipment */
        FIRE = 0x20000000,	/* Burns equipment */
        ONLY_GROUP = 0x40000000,	/* Only affects people of your alignment in the currentRoom.  For use with all_in_room */

    }

    /* --------------------------------------------------------------------------- */
    /* CurrentPlayerGameState states, similar to MERC's, used to define what state a connection
        is in. */
    /* --------------------------------------------------------------------------- */
    [DataContract]
    public enum ConnectedState
    {
        PLAYING = 0,	/* Playing the game */
        STATE_ONE = 1,	/* At login screen */
        GET_OLD_PASSWORD = 2,	/* Entering password */
        CONFIRM_NEW_NAME = 3,	/* New user, confirming new name */
        GET_NEW_PASSWORD = 4,	/* Asking for new password */
        CONFIRM_NEW_PASSWORD = 5,	/* Confirming new password */
        GET_NEW_SEX = 6,	/* Get sex of new user */
        GET_NEW_RACE = 7,	/* Get race of new user */
        CONFIRM_NEW_RACE = 8,	/* Confirm this race */
        READ_MOTD = 10,	/* Reading the message of the day */
        CONFIRM_ROLL = 11,	/* Confirming stat roll */
        GET_NEW_ANSI = 12,	/* Asking for ANSI */
        ASK_MENU = 13,	/* Login Menu.  Unused. */
        SHOW_TITLE = 14,	/* Showing the title screen. */
        GET_PAGELEN = 15,	/* Asking page length */
        CHANNELD = 16,	/* Special for mudlink */
        RWHO = 17,	/* Executing remote who */
        JUST_CONNECTED = 18,
        ENTERING_USER_NAME = 19,

        AEDITOR = -1,	/* Area Editor */
        REDITOR = -2,	/* Room Editor */
        MEDITOR = -3,	/* Mob Editor */
        OEDITOR = -4,	/* Object Editor */
        CEDITOR = -5,	/* Clan Editor */
        FSEDITOR = -7,	/* Fullscreen Editor */
        PEDITOR = -8,	/* Player editor */
        SEDITOR = -9,	/* Spell Editor */
        GODMENU = -10,	/* God Menu */
        SOCEDIT = -11,	/* Social Editor */
        SCRIPTEDITOR = -12,	/* Script/trigger Editor */
        SHELL = -13	/* Shell */
    }

    /* ----------------------------------------------- */
    /* Used for ACT calls, similar to diku style 'currentActionsAndBehavior' */
    /* ----------------------------------------------- */
    //public enum ActTarget
    //{
    //   TO_ROOM = 0,	/* Display to the currentRoom, not to string /
    //   TO_NOTVICT = 1, /* Display to the currentRoom, not char or victim */
    //   TO_VICT = 2,	/* Display to the victim */
    //   TO_CHAR = 3,	/* Display to the character */
    //   TO_NOTVICT_SPAM = 4,	/* Display TO_NOTVICT only if spam mode off */
    //   TO_SPAM = 5,	/* Display TO_ROOM only if spam mode off */
    //   TO_VICT_SPAM = 6,	/* Display TO_VICT only if spam mode off */
    //   TO_CHAR_SPAM = 7	/* Display TO_CHAR only if spam mode off */
    //}

    [FlagsAttribute]
    [DataContract]
    public enum RaceAlign
    {
        GOODRACE = 0x04000000,	/* Mask for good race */
        EVILRACE = 0x08000000,	/* Mask for evil race */
        NEUTRALRACE = 0x10000000	/* Unused. */
    }
    /* ---------- */
    /* Mob types. */
    /* ---------- */
    /// <summary>
    /// Each one of these will eventually need to be converted 
    /// into a MobType module
    /// </summary>
    [DataContract]
    public enum MobTypes
    {
        HUMAN = 0,	/* Can groundfight */
        ELF = 1,	/* Can groundfight */
        DWARF = 2,	/* Can groundfight */
        GNOME = 3,	/* Can groundfight */
        GIANT = 4,	/* Can groundfight */
        DRAGON = 5,	/* Kickproof, bashproof */
        CANINE = 6,
        RODENT = 7,
        INSECT = 8,
        UNDEAD = 9,
        GOLEM = 10,
        DEMON = 11,
        TROLL = 12,
        BIRD = 13,
        FISH = 14,
        STATUE = 15,
        FELINE = 16,
        PLANT = 17,
        GENERAL_ANIMAL = 18,
        FAERIE = 19,
        REPTILE = 20,
        GHOST = 21,	/* Can only be HPCurrent by glowing/humming weapons */
        OTHER = 22,
        LYCAN = 23,	/* Don't use */
        NIGHT = 24,	/* Don't use */
        ORC = 25,	/* Can groundfight */
        DARKELF = 26,	/* Can groundfight */
        DUMMY = 27,	/* Doesn't HPCurrent back */
        NONE = 28
        // NOTE - you can still add on to this dynamically to
        // create MoreRoomInfo mob types
    }

    /* ------------------------------------- */
    /* These values follow Theisles standard */
    /* ------------------------------------- */
    [FlagsAttribute]
    [DataContract]
    public enum ContainerStatus
    {
        None = 0,
        Closeable = 0x01,	/* Can container be opened/closed? */
        Pickproof = 0x02,	/* Is the container pickproof? */
        Closed = 0x04,	/* Does the container default to closed? */
        Locked = 0x08	/* Is the container locked? */
    }

    [FlagsAttribute]
    [DataContract]
    public enum LightStatus
    {
        None = 0,
        Lit = 0x01,	/* Is the light lit? */
        Fillable = 0x02	/* Is the light refillable? */
    }

    [FlagsAttribute]
    [DataContract]
    public enum ToolType
    {
        Tinderbox = 0x01,	/* Is this a tinderbox? */
        Lockpick = 0x02	/* Is this a lockpick? */
    }

    [DataContract]
    public enum CharRoomActionType
    {
        None = 0,
        CharLook,
        Other // ? ideas?
    }

    [DataContract]
    public enum MiscActionType
    {
        None = 0,
        CastSpell,
        UseSkill
    }

    [DataContract]
    public enum CharCharObjectActionType
    {
        None = 0,
        GiveItem = 1,
        ReceiveItem,
        TradeItem,
        BuyItem,
        SellItem
    }

    [DataContract]
    public enum CharCharActionType
    {
        None = 0,
        LookAtChar = 1,
        AttackChar,
        Communicate,
        Emote,
        LookAtPlayer,
        AttackPlayer
    }

    [DataContract]
    public enum RoomDirActionType
    {
        None = 0,
        Look = 1,
        Push,
        Open,
        Unlock,
        PickLock,
        Other
    }

    [DataContract]
    public enum InvRoomActionType
    {
        None = 0,
        DropItem = 1,
        PickupItem = 2,
        LookRoomItem = 3,
        UseRoomItem = 4
    }

    [DataContract]
    public enum InventoryActionType
    {
        None = 0,
        EquipItem = 1,
        UnequipItem,
        ViewInventory,
        ViewEquip,
        UseItem
    }

    [DataContract]
    public enum ResetWhere
    {
        RESET_LOC_INOBJ = -3,
        RESET_LOC_ONOBJ = -4,
        RESET_LOC_INROOM = -5,
        RESET_LOC_PREVOBJ = -6
    }




}
